package br.com.cfccultura.admin.control.actions.financeiro;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.stereotype.Component;

import br.com.cfccultura.admin.control.actions.DefaultAction;
import br.com.cfccultura.admin.model.vo.ContaReceber;
import br.com.cfccultura.admin.model.vo.Matricula;
import br.com.cfccultura.admin.model.vo.OrdemServico;
import br.com.cfccultura.admin.model.vo.Turma;

@Component("/matriculaAberto")
public class MatriculaAbertoAction extends DefaultAction {
	
	private static final Logger logger = Logger.getLogger(MatriculaAbertoAction.class); 
	
	public ActionForward iniciar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		Turma vo = new Turma();
		List<Turma> turmas = getTurmaDAO().consultar(vo);
		
		List<Matricula> matriculaDebito = new ArrayList<Matricula>();
		double valorTotal = 0D;
		for(Turma turma : turmas) {
			m:for(Matricula matricula : turma.getMatriculas()) {
				List<ContaReceber> debitos = getFluxoCaixaDAO().verificaDebito(matricula.getOrdemServico());
				if(debitos.size() == 0)
					continue;
				
				OrdemServico os = getOrdemServicoDAO().consultar(debitos.get(0).getOrdemServicoEspecie().getOrdemServico().getCodigo());
				matricula.setOrdemServico(os);
				matricula.setTurma(turma);
				
				double totalPago = 0D;
				for(ContaReceber receber : debitos) {
					totalPago += receber.getValorPagamento();
				}
				if(totalPago < os.getTotal()) {
					os.setDevedor(os.getTotal() - totalPago);
					valorTotal += os.getDevedor();
					matriculaDebito.add(matricula);
				}				
			}				
		}
		if(matriculaDebito.size() > 0) {
			request.setAttribute("matriculaDebito", matriculaDebito);
			request.setAttribute("valorTotal", valorTotal);
		}
		
		return mapping.findForward("body");
	}

}
